{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "hub",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "CallerMissingHubTag",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidLoanContractCaller",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "loanId",
          "type": "uint256"
        }
      ],
      "name": "LOANBurned",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "loanId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "loanContract",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "LOANMinted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "loanId",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getStateFingerprint",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastLoanId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "loanContract",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "loanId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60a06040523480156200001157600080fd5b506040516200185b3803806200185b8339810160408190526200003491620000a3565b6040805180820182526008815267282ba7102627a0a760c11b602080830191909152825180840190935260048352632627a0a760e11b908301526001600160a01b0383166080529060006200008a83826200017a565b5060016200009982826200017a565b5050505062000246565b600060208284031215620000b657600080fd5b81516001600160a01b0381168114620000ce57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200010057607f821691505b6020821081036200012157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200017557600081815260208120601f850160051c81016020861015620001505750805b601f850160051c820191505b8181101562000171578281556001016200015c565b5050505b505050565b81516001600160401b03811115620001965762000196620000d5565b620001ae81620001a78454620000eb565b8462000127565b602080601f831160018114620001e65760008415620001cd5750858301515b600019600386901b1c1916600185901b17855562000171565b600085815260208120601f198616915b828110156200021757888601518255948401946001909101908401620001f6565b5085821015620002365787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6080516115f962000262600039600061064d01526115f96000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80636a627842116100a2578063a22cb46511610071578063a22cb46514610252578063b88d4fde14610265578063c87b56dd14610278578063e985e9c51461028b578063f5112315146102c757600080fd5b80636a627842146101fb57806370a082311461020e57806395d89b4114610221578063a00d21fc1461022957600080fd5b806323b872dd116100e957806323b872dd1461019857806342842e0e146101ab57806342966c68146101be5780636352211e146101d157806368be92b4146101e457600080fd5b806301ffc9a71461011b57806306fdde0314610143578063081812fc14610158578063095ea7b314610183575b600080fd5b61012e6101293660046110af565b6102da565b60405190151581526020015b60405180910390f35b61014b610306565b60405161013a919061111c565b61016b61016636600461112f565b610398565b6040516001600160a01b03909116815260200161013a565b610196610191366004611164565b6103bf565b005b6101966101a636600461118e565b6104d9565b6101966101b936600461118e565b61050a565b6101966101cc36600461112f565b610525565b61016b6101df36600461112f565b6105af565b6101ed60065481565b60405190815260200161013a565b6101ed6102093660046111ca565b61060f565b6101ed61021c3660046111ca565b61077f565b61014b610805565b61016b61023736600461112f565b6007602052600090815260409020546001600160a01b031681565b6101966102603660046111f3565b610814565b610196610273366004611299565b610823565b61014b61028636600461112f565b61085b565b61012e610299366004611344565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6101ed6102d536600461112f565b6108de565b60006102e582610974565b8061030057506001600160e01b0319821663f511231560e01b145b92915050565b60606000805461031590611377565b80601f016020809104026020016040519081016040528092919081815260200182805461034190611377565b801561038e5780601f106103635761010080835404028352916020019161038e565b820191906000526020600020905b81548152906001019060200180831161037157829003601f168201915b5050505050905090565b60006103a3826109c4565b506000908152600460205260409020546001600160a01b031690565b60006103ca826105af565b9050806001600160a01b0316836001600160a01b03160361043c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061045857506104588133610299565b6104ca5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610433565b6104d48383610a26565b505050565b6104e33382610a94565b6104ff5760405162461bcd60e51b8152600401610433906113b1565b6104d4838383610b13565b6104d483838360405180602001604052806000815250610823565b6000818152600760205260409020546001600160a01b0316331461055c576040516374768c4960e11b815260040160405180910390fd5b600081815260076020526040902080546001600160a01b031916905561058181610c77565b60405181907f56f7da88d3aa2a8ad74b71a5b449a66a643193815eace8bbd6b089d4bc18294b90600090a250565b6000818152600260205260408120546001600160a01b0316806103005760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610433565b60405163680cabbd60e11b81523360048201527f9e56ea094d7a53440eef11fa42b63159fbf703b4ee579494a6ae85afc560359460248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d019577a90604401602060405180830381865afa15801561069c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c091906113fe565b15156000036107045760405163f8932b2d60e01b81527f9e56ea094d7a53440eef11fa42b63159fbf703b4ee579494a6ae85afc56035946004820152602401610433565b6006600081546107139061141b565b9182905550600081815260076020526040902080546001600160a01b0319163317905590506107428282610d0c565b6040516001600160a01b03831690339083907f2ca529bede83c064afd9331357a1ce320271c9c7ceda28ac31472d76f7aff53090600090a4919050565b60006001600160a01b0382166107e95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610433565b506001600160a01b031660009081526003602052604090205490565b60606001805461031590611377565b61081f338383610e97565b5050565b61082d3383610a94565b6108495760405162461bcd60e51b8152600401610433906113b1565b61085584848484610f65565b50505050565b6060610866826109c4565b60008281526007602052604080822054815163111d8a1560e01b815291516001600160a01b039091169263111d8a1592600480820193918290030181865afa1580156108b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103009190810190611442565b6000818152600760205260408120546001600160a01b0316806109045750600092915050565b60405163f511231560e01b8152600481018490526001600160a01b0382169063f511231590602401602060405180830381865afa158015610949573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096d91906114b9565b9392505050565b60006001600160e01b031982166380ac58cd60e01b14806109a557506001600160e01b03198216635b5e139f60e01b145b8061030057506301ffc9a760e01b6001600160e01b0319831614610300565b6000818152600260205260409020546001600160a01b0316610a235760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610433565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610a5b826105af565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610aa0836105af565b9050806001600160a01b0316846001600160a01b03161480610ae757506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80610b0b5750836001600160a01b0316610b0084610398565b6001600160a01b0316145b949350505050565b826001600160a01b0316610b26826105af565b6001600160a01b031614610b4c5760405162461bcd60e51b8152600401610433906114d2565b6001600160a01b038216610bae5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610433565b826001600160a01b0316610bc1826105af565b6001600160a01b031614610be75760405162461bcd60e51b8152600401610433906114d2565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000610c82826105af565b9050610c8d826105af565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b038216610d625760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610433565b6000818152600260205260409020546001600160a01b031615610dc75760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610433565b6000818152600260205260409020546001600160a01b031615610e2c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610433565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b816001600160a01b0316836001600160a01b031603610ef85760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610433565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610f70848484610b13565b610f7c84848484610f98565b6108555760405162461bcd60e51b815260040161043390611517565b60006001600160a01b0384163b1561108e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610fdc903390899088908890600401611569565b6020604051808303816000875af1925050508015611017575060408051601f3d908101601f19168201909252611014918101906115a6565b60015b611074573d808015611045576040519150601f19603f3d011682016040523d82523d6000602084013e61104a565b606091505b50805160000361106c5760405162461bcd60e51b815260040161043390611517565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610b0b565b506001949350505050565b6001600160e01b031981168114610a2357600080fd5b6000602082840312156110c157600080fd5b813561096d81611099565b60005b838110156110e75781810151838201526020016110cf565b50506000910152565b600081518084526111088160208601602086016110cc565b601f01601f19169290920160200192915050565b60208152600061096d60208301846110f0565b60006020828403121561114157600080fd5b5035919050565b80356001600160a01b038116811461115f57600080fd5b919050565b6000806040838503121561117757600080fd5b61118083611148565b946020939093013593505050565b6000806000606084860312156111a357600080fd5b6111ac84611148565b92506111ba60208501611148565b9150604084013590509250925092565b6000602082840312156111dc57600080fd5b61096d82611148565b8015158114610a2357600080fd5b6000806040838503121561120657600080fd5b61120f83611148565b9150602083013561121f816111e5565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156112695761126961122a565b604052919050565b600067ffffffffffffffff82111561128b5761128b61122a565b50601f01601f191660200190565b600080600080608085870312156112af57600080fd5b6112b885611148565b93506112c660208601611148565b925060408501359150606085013567ffffffffffffffff8111156112e957600080fd5b8501601f810187136112fa57600080fd5b803561130d61130882611271565b611240565b81815288602083850101111561132257600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b6000806040838503121561135757600080fd5b61136083611148565b915061136e60208401611148565b90509250929050565b600181811c9082168061138b57607f821691505b6020821081036113ab57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60006020828403121561141057600080fd5b815161096d816111e5565b60006001820161143b57634e487b7160e01b600052601160045260246000fd5b5060010190565b60006020828403121561145457600080fd5b815167ffffffffffffffff81111561146b57600080fd5b8201601f8101841361147c57600080fd5b805161148a61130882611271565b81815285602083850101111561149f57600080fd5b6114b08260208301602086016110cc565b95945050505050565b6000602082840312156114cb57600080fd5b5051919050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061159c908301846110f0565b9695505050505050565b6000602082840312156115b857600080fd5b815161096d8161109956fea2646970667358221220f9e174f43cdc77a3bc492a640d10f97b14cc702215fccc8c5fd18dca284dc9d164736f6c63430008100033",
    "sourceMap": "671:4240:92:-:0;;;1908:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1390:113:51;;;;;;;;;;;-1:-1:-1;;;1390:113:51;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1390:113:51;;;;-1:-1:-1;;;;;1386:20:75;;;;1390:113:51;-1:-1:-1;1456:13:51;1390:113;-1:-1:-1;1456:13:51;:::i;:::-;-1:-1:-1;1479:7:51;:17;1489:7;1479;:17;:::i;:::-;;1390:113;;1908:85:92;671:4240;;14:290:119;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:119;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:119:o;309:127::-;370:10;365:3;361:20;358:1;351:31;401:4;398:1;391:15;425:4;422:1;415:15;441:380;520:1;516:12;;;;563;;;584:61;;638:4;630:6;626:17;616:27;;584:61;691:2;683:6;680:14;660:18;657:38;654:161;;737:10;732:3;728:20;725:1;718:31;772:4;769:1;762:15;800:4;797:1;790:15;654:161;;441:380;;;:::o;952:545::-;1054:2;1049:3;1046:11;1043:448;;;1090:1;1115:5;1111:2;1104:17;1160:4;1156:2;1146:19;1230:2;1218:10;1214:19;1211:1;1207:27;1201:4;1197:38;1266:4;1254:10;1251:20;1248:47;;;-1:-1:-1;1289:4:119;1248:47;1344:2;1339:3;1335:12;1332:1;1328:20;1322:4;1318:31;1308:41;;1399:82;1417:2;1410:5;1407:13;1399:82;;;1462:17;;;1443:1;1432:13;1399:82;;;1403:3;;;1043:448;952:545;;;:::o;1673:1352::-;1793:10;;-1:-1:-1;;;;;1815:30:119;;1812:56;;;1848:18;;:::i;:::-;1877:97;1967:6;1927:38;1959:4;1953:11;1927:38;:::i;:::-;1921:4;1877:97;:::i;:::-;2029:4;;2093:2;2082:14;;2110:1;2105:663;;;;2812:1;2829:6;2826:89;;;-1:-1:-1;2881:19:119;;;2875:26;2826:89;-1:-1:-1;;1630:1:119;1626:11;;;1622:24;1618:29;1608:40;1654:1;1650:11;;;1605:57;2928:81;;2075:944;;2105:663;899:1;892:14;;;936:4;923:18;;-1:-1:-1;;2141:20:119;;;2259:236;2273:7;2270:1;2267:14;2259:236;;;2362:19;;;2356:26;2341:42;;2454:27;;;;2422:1;2410:14;;;;2289:19;;2259:236;;;2263:3;2523:6;2514:7;2511:19;2508:201;;;2584:19;;;2578:26;-1:-1:-1;;2667:1:119;2663:14;;;2679:3;2659:24;2655:37;2651:42;2636:58;2621:74;;2508:201;-1:-1:-1;;;;;2755:1:119;2739:14;;;2735:22;2722:36;;-1:-1:-1;1673:1352:119:o;:::-;671:4240:92;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c80636a627842116100a2578063a22cb46511610071578063a22cb46514610252578063b88d4fde14610265578063c87b56dd14610278578063e985e9c51461028b578063f5112315146102c757600080fd5b80636a627842146101fb57806370a082311461020e57806395d89b4114610221578063a00d21fc1461022957600080fd5b806323b872dd116100e957806323b872dd1461019857806342842e0e146101ab57806342966c68146101be5780636352211e146101d157806368be92b4146101e457600080fd5b806301ffc9a71461011b57806306fdde0314610143578063081812fc14610158578063095ea7b314610183575b600080fd5b61012e6101293660046110af565b6102da565b60405190151581526020015b60405180910390f35b61014b610306565b60405161013a919061111c565b61016b61016636600461112f565b610398565b6040516001600160a01b03909116815260200161013a565b610196610191366004611164565b6103bf565b005b6101966101a636600461118e565b6104d9565b6101966101b936600461118e565b61050a565b6101966101cc36600461112f565b610525565b61016b6101df36600461112f565b6105af565b6101ed60065481565b60405190815260200161013a565b6101ed6102093660046111ca565b61060f565b6101ed61021c3660046111ca565b61077f565b61014b610805565b61016b61023736600461112f565b6007602052600090815260409020546001600160a01b031681565b6101966102603660046111f3565b610814565b610196610273366004611299565b610823565b61014b61028636600461112f565b61085b565b61012e610299366004611344565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6101ed6102d536600461112f565b6108de565b60006102e582610974565b8061030057506001600160e01b0319821663f511231560e01b145b92915050565b60606000805461031590611377565b80601f016020809104026020016040519081016040528092919081815260200182805461034190611377565b801561038e5780601f106103635761010080835404028352916020019161038e565b820191906000526020600020905b81548152906001019060200180831161037157829003601f168201915b5050505050905090565b60006103a3826109c4565b506000908152600460205260409020546001600160a01b031690565b60006103ca826105af565b9050806001600160a01b0316836001600160a01b03160361043c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061045857506104588133610299565b6104ca5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610433565b6104d48383610a26565b505050565b6104e33382610a94565b6104ff5760405162461bcd60e51b8152600401610433906113b1565b6104d4838383610b13565b6104d483838360405180602001604052806000815250610823565b6000818152600760205260409020546001600160a01b0316331461055c576040516374768c4960e11b815260040160405180910390fd5b600081815260076020526040902080546001600160a01b031916905561058181610c77565b60405181907f56f7da88d3aa2a8ad74b71a5b449a66a643193815eace8bbd6b089d4bc18294b90600090a250565b6000818152600260205260408120546001600160a01b0316806103005760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610433565b60405163680cabbd60e11b81523360048201527f9e56ea094d7a53440eef11fa42b63159fbf703b4ee579494a6ae85afc560359460248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d019577a90604401602060405180830381865afa15801561069c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c091906113fe565b15156000036107045760405163f8932b2d60e01b81527f9e56ea094d7a53440eef11fa42b63159fbf703b4ee579494a6ae85afc56035946004820152602401610433565b6006600081546107139061141b565b9182905550600081815260076020526040902080546001600160a01b0319163317905590506107428282610d0c565b6040516001600160a01b03831690339083907f2ca529bede83c064afd9331357a1ce320271c9c7ceda28ac31472d76f7aff53090600090a4919050565b60006001600160a01b0382166107e95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610433565b506001600160a01b031660009081526003602052604090205490565b60606001805461031590611377565b61081f338383610e97565b5050565b61082d3383610a94565b6108495760405162461bcd60e51b8152600401610433906113b1565b61085584848484610f65565b50505050565b6060610866826109c4565b60008281526007602052604080822054815163111d8a1560e01b815291516001600160a01b039091169263111d8a1592600480820193918290030181865afa1580156108b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103009190810190611442565b6000818152600760205260408120546001600160a01b0316806109045750600092915050565b60405163f511231560e01b8152600481018490526001600160a01b0382169063f511231590602401602060405180830381865afa158015610949573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096d91906114b9565b9392505050565b60006001600160e01b031982166380ac58cd60e01b14806109a557506001600160e01b03198216635b5e139f60e01b145b8061030057506301ffc9a760e01b6001600160e01b0319831614610300565b6000818152600260205260409020546001600160a01b0316610a235760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610433565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610a5b826105af565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610aa0836105af565b9050806001600160a01b0316846001600160a01b03161480610ae757506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80610b0b5750836001600160a01b0316610b0084610398565b6001600160a01b0316145b949350505050565b826001600160a01b0316610b26826105af565b6001600160a01b031614610b4c5760405162461bcd60e51b8152600401610433906114d2565b6001600160a01b038216610bae5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610433565b826001600160a01b0316610bc1826105af565b6001600160a01b031614610be75760405162461bcd60e51b8152600401610433906114d2565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000610c82826105af565b9050610c8d826105af565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b038216610d625760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610433565b6000818152600260205260409020546001600160a01b031615610dc75760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610433565b6000818152600260205260409020546001600160a01b031615610e2c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610433565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b816001600160a01b0316836001600160a01b031603610ef85760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610433565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610f70848484610b13565b610f7c84848484610f98565b6108555760405162461bcd60e51b815260040161043390611517565b60006001600160a01b0384163b1561108e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610fdc903390899088908890600401611569565b6020604051808303816000875af1925050508015611017575060408051601f3d908101601f19168201909252611014918101906115a6565b60015b611074573d808015611045576040519150601f19603f3d011682016040523d82523d6000602084013e61104a565b606091505b50805160000361106c5760405162461bcd60e51b815260040161043390611517565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610b0b565b506001949350505050565b6001600160e01b031981168114610a2357600080fd5b6000602082840312156110c157600080fd5b813561096d81611099565b60005b838110156110e75781810151838201526020016110cf565b50506000910152565b600081518084526111088160208601602086016110cc565b601f01601f19169290920160200192915050565b60208152600061096d60208301846110f0565b60006020828403121561114157600080fd5b5035919050565b80356001600160a01b038116811461115f57600080fd5b919050565b6000806040838503121561117757600080fd5b61118083611148565b946020939093013593505050565b6000806000606084860312156111a357600080fd5b6111ac84611148565b92506111ba60208501611148565b9150604084013590509250925092565b6000602082840312156111dc57600080fd5b61096d82611148565b8015158114610a2357600080fd5b6000806040838503121561120657600080fd5b61120f83611148565b9150602083013561121f816111e5565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156112695761126961122a565b604052919050565b600067ffffffffffffffff82111561128b5761128b61122a565b50601f01601f191660200190565b600080600080608085870312156112af57600080fd5b6112b885611148565b93506112c660208601611148565b925060408501359150606085013567ffffffffffffffff8111156112e957600080fd5b8501601f810187136112fa57600080fd5b803561130d61130882611271565b611240565b81815288602083850101111561132257600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b6000806040838503121561135757600080fd5b61136083611148565b915061136e60208401611148565b90509250929050565b600181811c9082168061138b57607f821691505b6020821081036113ab57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60006020828403121561141057600080fd5b815161096d816111e5565b60006001820161143b57634e487b7160e01b600052601160045260246000fd5b5060010190565b60006020828403121561145457600080fd5b815167ffffffffffffffff81111561146b57600080fd5b8201601f8101841361147c57600080fd5b805161148a61130882611271565b81815285602083850101111561149f57600080fd5b6114b08260208301602086016110cc565b95945050505050565b6000602082840312156114cb57600080fd5b5051919050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061159c908301846110f0565b9695505050505050565b6000602082840312156115b857600080fd5b815161096d8161109956fea2646970667358221220f9e174f43cdc77a3bc492a640d10f97b14cc702215fccc8c5fd18dca284dc9d164736f6c63430008100033",
    "sourceMap": "671:4240:92:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4700:208;;;;;;:::i;:::-;;:::i;:::-;;;565:14:119;;558:22;540:41;;528:2;513:18;4700:208:92;;;;;;;;2471:98:51;;;:::i;:::-;;;;;;;:::i;3935:167::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:119;;;1679:51;;1667:2;1652:18;3935:167:51;1533:203:119;3468:406:51;;;;;;:::i;:::-;;:::i;:::-;;4612:296;;;;;;:::i;:::-;;:::i;4974:149::-;;;;;;:::i;:::-;;:::i;2990:236:92:-;;;;;;:::i;:::-;;:::i;2190:219:51:-;;;;;;:::i;:::-;;:::i;1032:25:92:-;;;;;;;;;2657::119;;;2645:2;2630:18;1032:25:92;2511:177:119;2462:241:92;;;;;;:::i;:::-;;:::i;1929:204:51:-;;;;;;:::i;:::-;;:::i;2633:102::-;;;:::i;1160:48:92:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1160:48:92;;;4169:153:51;;;;;;:::i;:::-;;:::i;5189:276::-;;;;;;:::i;:::-;;:::i;3646:211:92:-;;;;;;:::i;:::-;;:::i;4388:162:51:-;;;;;;:::i;:::-;-1:-1:-1;;;;;4508:25:51;;;4485:4;4508:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4388:162;4130:300:92;;;;;;:::i;:::-;;:::i;4700:208::-;4785:4;4808:36;4832:11;4808:23;:36::i;:::-;:93;;;-1:-1:-1;;;;;;;4860:41:92;;-1:-1:-1;;;4860:41:92;4808:93;4801:100;4700:208;-1:-1:-1;;4700:208:92:o;2471:98:51:-;2525:13;2557:5;2550:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2471:98;:::o;3935:167::-;4011:7;4030:23;4045:7;4030:14;:23::i;:::-;-1:-1:-1;4071:24:51;;;;:15;:24;;;;;;-1:-1:-1;;;;;4071:24:51;;3935:167::o;3468:406::-;3548:13;3564:23;3579:7;3564:14;:23::i;:::-;3548:39;;3611:5;-1:-1:-1;;;;;3605:11:51;:2;-1:-1:-1;;;;;3605:11:51;;3597:57;;;;-1:-1:-1;;;3597:57:51;;5857:2:119;3597:57:51;;;5839:21:119;5896:2;5876:18;;;5869:30;5935:34;5915:18;;;5908:62;-1:-1:-1;;;5986:18:119;;;5979:31;6027:19;;3597:57:51;;;;;;;;;734:10:56;-1:-1:-1;;;;;3686:21:51;;;;:62;;-1:-1:-1;3711:37:51;3728:5;734:10:56;4388:162:51;:::i;3711:37::-;3665:170;;;;-1:-1:-1;;;3665:170:51;;6259:2:119;3665:170:51;;;6241:21:119;6298:2;6278:18;;;6271:30;6337:34;6317:18;;;6310:62;6408:31;6388:18;;;6381:59;6457:19;;3665:170:51;6057:425:119;3665:170:51;3846:21;3855:2;3859:7;3846:8;:21::i;:::-;3538:336;3468:406;;:::o;4612:296::-;4771:41;734:10:56;4804:7:51;4771:18;:41::i;:::-;4763:99;;;;-1:-1:-1;;;4763:99:51;;;;;;;:::i;:::-;4873:28;4883:4;4889:2;4893:7;4873:9;:28::i;4974:149::-;5077:39;5094:4;5100:2;5104:7;5077:39;;;;;;;;;;;;:16;:39::i;2990:236:92:-;3043:20;;;;:12;:20;;;;;;-1:-1:-1;;;;;3043:20:92;3067:10;3043:34;3039:86;;3098:27;;-1:-1:-1;;;3098:27:92;;;;;;;;;;;3039:86;3143:20;;;;:12;:20;;;;;3136:27;;-1:-1:-1;;;;;;3136:27:92;;;3173:13;3156:6;3173:5;:13::i;:::-;3201:18;;3212:6;;3201:18;;;;;2990:236;:::o;2190:219:51:-;2262:7;6794:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6794:16:51;;2324:56;;;;-1:-1:-1;;;2324:56:51;;7103:2:119;2324:56:51;;;7085:21:119;7142:2;7122:18;;;7115:30;-1:-1:-1;;;7161:18:119;;;7154:54;7225:18;;2324:56:51;6901:348:119;2462:241:92;849:46:75;;-1:-1:-1;;;849:46:75;;860:10;849:46;;;7428:51:119;266:28:76;7495:18:119;;;7488:34;2524:14:92;;849:3:75;-1:-1:-1;;;;;849:10:75;;;;7401:18:119;;849:46:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;899:5;849:55;845:123;;925:43;;-1:-1:-1;;;925:43:75;;266:28:76;925:43:75;;;2657:25:119;2630:18;;925:43:75;2511:177:119;845:123:75;2561:10:92::1;;2559:12;;;;;:::i;:::-;::::0;;;;-1:-1:-1;2581:20:92::1;::::0;;;:12:::1;:20;::::0;;;;:33;;-1:-1:-1;;;;;;2581:33:92::1;2604:10;2581:33;::::0;;2559:12;-1:-1:-1;2624:20:92::1;2630:5:::0;2559:12;2624:5:::1;:20::i;:::-;2659:37;::::0;-1:-1:-1;;;;;2659:37:92;::::1;::::0;2678:10:::1;::::0;2670:6;;2659:37:::1;::::0;;;::::1;2462:241:::0;;;:::o;1929:204:51:-;2001:7;-1:-1:-1;;;;;2028:19:51;;2020:73;;;;-1:-1:-1;;;2020:73:51;;8222:2:119;2020:73:51;;;8204:21:119;8261:2;8241:18;;;8234:30;8300:34;8280:18;;;8273:62;-1:-1:-1;;;8351:18:119;;;8344:39;8400:19;;2020:73:51;8020:405:119;2020:73:51;-1:-1:-1;;;;;;2110:16:51;;;;;:9;:16;;;;;;;1929:204::o;2633:102::-;2689:13;2721:7;2714:14;;;;;:::i;4169:153::-;4263:52;734:10:56;4296:8:51;4306;4263:18;:52::i;:::-;4169:153;;:::o;5189:276::-;5319:41;734:10:56;5352:7:51;5319:18;:41::i;:::-;5311:99;;;;-1:-1:-1;;;5311:99:51;;;;;;;:::i;:::-;5420:38;5434:4;5440:2;5444:7;5453:4;5420:13;:38::i;:::-;5189:276;;;;:::o;3646:211:92:-;3719:13;3744:23;3759:7;3744:14;:23::i;:::-;3810:21;;;;:12;:21;;;;;;;3785:65;;-1:-1:-1;;;3785:65:92;;;;-1:-1:-1;;;;;3810:21:92;;;;3785:63;;:65;;;;;;;;;;;3810:21;3785:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3785:65:92;;;;;;;;;;;;:::i;4130:300::-;4216:7;4259:21;;;:12;:21;;;;;;-1:-1:-1;;;;;4259:21:92;;4291:62;;-1:-1:-1;4351:1:92;;4130:300;-1:-1:-1;;4130:300:92:o;4291:62::-;4371:52;;-1:-1:-1;;;4371:52:92;;;;;2657:25:119;;;-1:-1:-1;;;;;4371:43:92;;;;;2630:18:119;;4371:52:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4364:59;4130:300;-1:-1:-1;;;4130:300:92:o;1570::51:-;1672:4;-1:-1:-1;;;;;;1707:40:51;;-1:-1:-1;;;1707:40:51;;:104;;-1:-1:-1;;;;;;;1763:48:51;;-1:-1:-1;;;1763:48:51;1707:104;:156;;;-1:-1:-1;;;;;;;;;;937:40:61;;;1827:36:51;829:155:61;13240:133:51;7185:4;6794:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6794:16:51;13313:53;;;;-1:-1:-1;;;13313:53:51;;7103:2:119;13313:53:51;;;7085:21:119;7142:2;7122:18;;;7115:30;-1:-1:-1;;;7161:18:119;;;7154:54;7225:18;;13313:53:51;6901:348:119;13313:53:51;13240:133;:::o;12572:171::-;12646:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;12646:29:51;-1:-1:-1;;;;;12646:29:51;;;;;;;;:24;;12699:23;12646:24;12699:14;:23::i;:::-;-1:-1:-1;;;;;12690:46:51;;;;;;;;;;;12572:171;;:::o;7404:261::-;7497:4;7513:13;7529:23;7544:7;7529:14;:23::i;:::-;7513:39;;7581:5;-1:-1:-1;;;;;7570:16:51;:7;-1:-1:-1;;;;;7570:16:51;;:52;;;-1:-1:-1;;;;;;4508:25:51;;;4485:4;4508:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7590:32;7570:87;;;;7650:7;-1:-1:-1;;;;;7626:31:51;:20;7638:7;7626:11;:20::i;:::-;-1:-1:-1;;;;;7626:31:51;;7570:87;7562:96;7404:261;-1:-1:-1;;;;7404:261:51:o;11257:1203::-;11381:4;-1:-1:-1;;;;;11354:31:51;:23;11369:7;11354:14;:23::i;:::-;-1:-1:-1;;;;;11354:31:51;;11346:81;;;;-1:-1:-1;;;11346:81:51;;;;;;;:::i;:::-;-1:-1:-1;;;;;11445:16:51;;11437:65;;;;-1:-1:-1;;;11437:65:51;;9880:2:119;11437:65:51;;;9862:21:119;9919:2;9899:18;;;9892:30;9958:34;9938:18;;;9931:62;-1:-1:-1;;;10009:18:119;;;10002:34;10053:19;;11437:65:51;9678:400:119;11437:65:51;11682:4;-1:-1:-1;;;;;11655:31:51;:23;11670:7;11655:14;:23::i;:::-;-1:-1:-1;;;;;11655:31:51;;11647:81;;;;-1:-1:-1;;;11647:81:51;;;;;;;:::i;:::-;11797:24;;;;:15;:24;;;;;;;;11790:31;;-1:-1:-1;;;;;;11790:31:51;;;;;;-1:-1:-1;;;;;12265:15:51;;;;;;:9;:15;;;;;:20;;-1:-1:-1;;12265:20:51;;;12299:13;;;;;;;;;:18;;11790:31;12299:18;;;12337:16;;;:7;:16;;;;;;:21;;;;;;;;;;12374:27;;11813:7;;12374:27;;;3538:336;3468:406;;:::o;10171:762::-;10230:13;10246:23;10261:7;10246:14;:23::i;:::-;10230:39;;10441:23;10456:7;10441:14;:23::i;:::-;10509:24;;;;:15;:24;;;;;;;;10502:31;;-1:-1:-1;;;;;;10502:31:51;;;;;;-1:-1:-1;;;;;10749:16:51;;;;;:9;:16;;;;;:21;;-1:-1:-1;;10749:21:51;;;10797:16;;;:7;:16;;;;;;10790:23;;;;;;;10829:36;10433:31;;-1:-1:-1;10525:7:51;;10829:36;;10509:24;;10829:36;4169:153;;:::o;8925:920::-;-1:-1:-1;;;;;9004:16:51;;8996:61;;;;-1:-1:-1;;;8996:61:51;;10285:2:119;8996:61:51;;;10267:21:119;;;10304:18;;;10297:30;10363:34;10343:18;;;10336:62;10415:18;;8996:61:51;10083:356:119;8996:61:51;7185:4;6794:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6794:16:51;7208:31;9067:58;;;;-1:-1:-1;;;9067:58:51;;10646:2:119;9067:58:51;;;10628:21:119;10685:2;10665:18;;;10658:30;10724;10704:18;;;10697:58;10772:18;;9067:58:51;10444:352:119;9067:58:51;7185:4;6794:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6794:16:51;7208:31;9271:58;;;;-1:-1:-1;;;9271:58:51;;10646:2:119;9271:58:51;;;10628:21:119;10685:2;10665:18;;;10658:30;10724;10704:18;;;10697:58;10772:18;;9271:58:51;10444:352:119;9271:58:51;-1:-1:-1;;;;;9671:13:51;;;;;;:9;:13;;;;;;;;:18;;9688:1;9671:18;;;9710:16;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9710:21:51;;;;;9747:33;9718:7;;9671:13;;9747:33;;9671:13;;9747:33;4169:153;;:::o;12879:277::-;12999:8;-1:-1:-1;;;;;12990:17:51;:5;-1:-1:-1;;;;;12990:17:51;;12982:55;;;;-1:-1:-1;;;12982:55:51;;11003:2:119;12982:55:51;;;10985:21:119;11042:2;11022:18;;;11015:30;11081:27;11061:18;;;11054:55;11126:18;;12982:55:51;10801:349:119;12982:55:51;-1:-1:-1;;;;;13047:25:51;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;13047:46:51;;;;;;;;;;13108:41;;540::119;;;13108::51;;513:18:119;13108:41:51;;;;;;;12879:277;;;:::o;6326:267::-;6438:28;6448:4;6454:2;6458:7;6438:9;:28::i;:::-;6484:47;6507:4;6513:2;6517:7;6526:4;6484:22;:47::i;:::-;6476:110;;;;-1:-1:-1;;;6476:110:51;;;;;;;:::i;13925:831::-;14074:4;-1:-1:-1;;;;;14094:13:51;;1702:19:55;:23;14090:660:51;;14129:71;;-1:-1:-1;;;14129:71:51;;-1:-1:-1;;;;;14129:36:51;;;;;:71;;734:10:56;;14180:4:51;;14186:7;;14195:4;;14129:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14129:71:51;;;;;;;;-1:-1:-1;;14129:71:51;;;;;;;;;;;;:::i;:::-;;;14125:573;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14367:6;:13;14384:1;14367:18;14363:321;;14409:60;;-1:-1:-1;;;14409:60:51;;;;;;;:::i;14363:321::-;14636:6;14630:13;14621:6;14617:2;14613:15;14606:38;14125:573;-1:-1:-1;;;;;;14250:51:51;-1:-1:-1;;;14250:51:51;;-1:-1:-1;14243:58:51;;14090:660;-1:-1:-1;14735:4:51;13925:831;;;;;;:::o;14:131:119:-;-1:-1:-1;;;;;;88:32:119;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:119;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:119;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:119:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:119;;1348:180;-1:-1:-1;1348:180:119:o;1741:173::-;1809:20;;-1:-1:-1;;;;;1858:31:119;;1848:42;;1838:70;;1904:1;1901;1894:12;1838:70;1741:173;;;:::o;1919:254::-;1987:6;1995;2048:2;2036:9;2027:7;2023:23;2019:32;2016:52;;;2064:1;2061;2054:12;2016:52;2087:29;2106:9;2087:29;:::i;:::-;2077:39;2163:2;2148:18;;;;2135:32;;-1:-1:-1;;;1919:254:119:o;2178:328::-;2255:6;2263;2271;2324:2;2312:9;2303:7;2299:23;2295:32;2292:52;;;2340:1;2337;2330:12;2292:52;2363:29;2382:9;2363:29;:::i;:::-;2353:39;;2411:38;2445:2;2434:9;2430:18;2411:38;:::i;:::-;2401:48;;2496:2;2485:9;2481:18;2468:32;2458:42;;2178:328;;;;;:::o;2693:186::-;2752:6;2805:2;2793:9;2784:7;2780:23;2776:32;2773:52;;;2821:1;2818;2811:12;2773:52;2844:29;2863:9;2844:29;:::i;2884:118::-;2970:5;2963:13;2956:21;2949:5;2946:32;2936:60;;2992:1;2989;2982:12;3007:315;3072:6;3080;3133:2;3121:9;3112:7;3108:23;3104:32;3101:52;;;3149:1;3146;3139:12;3101:52;3172:29;3191:9;3172:29;:::i;:::-;3162:39;;3251:2;3240:9;3236:18;3223:32;3264:28;3286:5;3264:28;:::i;:::-;3311:5;3301:15;;;3007:315;;;;;:::o;3327:127::-;3388:10;3383:3;3379:20;3376:1;3369:31;3419:4;3416:1;3409:15;3443:4;3440:1;3433:15;3459:275;3530:2;3524:9;3595:2;3576:13;;-1:-1:-1;;3572:27:119;3560:40;;3630:18;3615:34;;3651:22;;;3612:62;3609:88;;;3677:18;;:::i;:::-;3713:2;3706:22;3459:275;;-1:-1:-1;3459:275:119:o;3739:186::-;3787:4;3820:18;3812:6;3809:30;3806:56;;;3842:18;;:::i;:::-;-1:-1:-1;3908:2:119;3887:15;-1:-1:-1;;3883:29:119;3914:4;3879:40;;3739:186::o;3930:888::-;4025:6;4033;4041;4049;4102:3;4090:9;4081:7;4077:23;4073:33;4070:53;;;4119:1;4116;4109:12;4070:53;4142:29;4161:9;4142:29;:::i;:::-;4132:39;;4190:38;4224:2;4213:9;4209:18;4190:38;:::i;:::-;4180:48;;4275:2;4264:9;4260:18;4247:32;4237:42;;4330:2;4319:9;4315:18;4302:32;4357:18;4349:6;4346:30;4343:50;;;4389:1;4386;4379:12;4343:50;4412:22;;4465:4;4457:13;;4453:27;-1:-1:-1;4443:55:119;;4494:1;4491;4484:12;4443:55;4530:2;4517:16;4555:48;4571:31;4599:2;4571:31;:::i;:::-;4555:48;:::i;:::-;4626:2;4619:5;4612:17;4666:7;4661:2;4656;4652;4648:11;4644:20;4641:33;4638:53;;;4687:1;4684;4677:12;4638:53;4742:2;4737;4733;4729:11;4724:2;4717:5;4713:14;4700:45;4786:1;4781:2;4776;4769:5;4765:14;4761:23;4754:34;4807:5;4797:15;;;;;3930:888;;;;;;;:::o;4823:260::-;4891:6;4899;4952:2;4940:9;4931:7;4927:23;4923:32;4920:52;;;4968:1;4965;4958:12;4920:52;4991:29;5010:9;4991:29;:::i;:::-;4981:39;;5039:38;5073:2;5062:9;5058:18;5039:38;:::i;:::-;5029:48;;4823:260;;;;;:::o;5270:380::-;5349:1;5345:12;;;;5392;;;5413:61;;5467:4;5459:6;5455:17;5445:27;;5413:61;5520:2;5512:6;5509:14;5489:18;5486:38;5483:161;;5566:10;5561:3;5557:20;5554:1;5547:31;5601:4;5598:1;5591:15;5629:4;5626:1;5619:15;5483:161;;5270:380;;;:::o;6487:409::-;6689:2;6671:21;;;6728:2;6708:18;;;6701:30;6767:34;6762:2;6747:18;;6740:62;-1:-1:-1;;;6833:2:119;6818:18;;6811:43;6886:3;6871:19;;6487:409::o;7533:245::-;7600:6;7653:2;7641:9;7632:7;7628:23;7624:32;7621:52;;;7669:1;7666;7659:12;7621:52;7701:9;7695:16;7720:28;7742:5;7720:28;:::i;7783:232::-;7822:3;7843:17;;;7840:140;;7902:10;7897:3;7893:20;7890:1;7883:31;7937:4;7934:1;7927:15;7965:4;7962:1;7955:15;7840:140;-1:-1:-1;8007:1:119;7996:13;;7783:232::o;8430:648::-;8510:6;8563:2;8551:9;8542:7;8538:23;8534:32;8531:52;;;8579:1;8576;8569:12;8531:52;8612:9;8606:16;8645:18;8637:6;8634:30;8631:50;;;8677:1;8674;8667:12;8631:50;8700:22;;8753:4;8745:13;;8741:27;-1:-1:-1;8731:55:119;;8782:1;8779;8772:12;8731:55;8811:2;8805:9;8836:48;8852:31;8880:2;8852:31;:::i;8836:48::-;8907:2;8900:5;8893:17;8947:7;8942:2;8937;8933;8929:11;8925:20;8922:33;8919:53;;;8968:1;8965;8958:12;8919:53;8981:67;9045:2;9040;9033:5;9029:14;9024:2;9020;9016:11;8981:67;:::i;:::-;9067:5;8430:648;-1:-1:-1;;;;;8430:648:119:o;9083:184::-;9153:6;9206:2;9194:9;9185:7;9181:23;9177:32;9174:52;;;9222:1;9219;9212:12;9174:52;-1:-1:-1;9245:16:119;;9083:184;-1:-1:-1;9083:184:119:o;9272:401::-;9474:2;9456:21;;;9513:2;9493:18;;;9486:30;9552:34;9547:2;9532:18;;9525:62;-1:-1:-1;;;9618:2:119;9603:18;;9596:35;9663:3;9648:19;;9272:401::o;11155:414::-;11357:2;11339:21;;;11396:2;11376:18;;;11369:30;11435:34;11430:2;11415:18;;11408:62;-1:-1:-1;;;11501:2:119;11486:18;;11479:48;11559:3;11544:19;;11155:414::o;11574:489::-;-1:-1:-1;;;;;11843:15:119;;;11825:34;;11895:15;;11890:2;11875:18;;11868:43;11942:2;11927:18;;11920:34;;;11990:3;11985:2;11970:18;;11963:31;;;11768:4;;12011:46;;12037:19;;12029:6;12011:46;:::i;:::-;12003:54;11574:489;-1:-1:-1;;;;;;11574:489:119:o;12068:249::-;12137:6;12190:2;12178:9;12169:7;12165:23;12161:32;12158:52;;;12206:1;12203;12196:12;12158:52;12238:9;12232:16;12257:30;12281:5;12257:30;:::i",
    "linkReferences": {},
    "immutableReferences": {
      "60529": [
        {
          "start": 1613,
          "length": 32
        }
      ]
    }
  },
  "methodIdentifiers": {
    "approve(address,uint256)": "095ea7b3",
    "balanceOf(address)": "70a08231",
    "burn(uint256)": "42966c68",
    "getApproved(uint256)": "081812fc",
    "getStateFingerprint(uint256)": "f5112315",
    "isApprovedForAll(address,address)": "e985e9c5",
    "lastLoanId()": "68be92b4",
    "loanContract(uint256)": "a00d21fc",
    "mint(address)": "6a627842",
    "name()": "06fdde03",
    "ownerOf(uint256)": "6352211e",
    "safeTransferFrom(address,address,uint256)": "42842e0e",
    "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
    "setApprovalForAll(address,bool)": "a22cb465",
    "supportsInterface(bytes4)": "01ffc9a7",
    "symbol()": "95d89b41",
    "tokenURI(uint256)": "c87b56dd",
    "transferFrom(address,address,uint256)": "23b872dd"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hub\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"CallerMissingHubTag\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLoanContractCaller\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"}],\"name\":\"LOANBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"loanContract\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"LOANMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getStateFingerprint\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastLoanId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"loanContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Token doesn't hold any loan logic, just an address of a loan contract that minted the LOAN token.      PWN LOAN token is shared between all loan contracts.\",\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"burn(uint256)\":{\"details\":\"Any address that is associated with given loan id can call this function.      It is enabled to let deprecated loan contracts repay and claim existing loans.\",\"params\":{\"loanId\":\"Id of a LOAN token to be burned.\"}},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"getStateFingerprint(uint256)\":{\"details\":\"See {IERC5646-getStateFingerprint}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"mint(address)\":{\"details\":\"Only an address with associated `ACTIVE_LOAN` tag in PWN Hub can call this function.\",\"params\":{\"owner\":\"Address of a LOAN token receiver.\"},\"returns\":{\"loanId\":\"Id of a newly minted LOAN token.\"}},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"params\":{\"tokenId\":\"Id of a LOAN token.\"},\"returns\":{\"_0\":\"Metadata uri for given token id (loan id).\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"stateVariables\":{\"lastLoanId\":{\"details\":\"Last used LOAN id. First LOAN id is 1. This value is incremental.\"},\"loanContract\":{\"details\":\"Mapping of a LOAN id to a loan contract that minted the LOAN token.\"}},\"title\":\"PWN LOAN token\",\"version\":1},\"userdoc\":{\"errors\":{\"CallerMissingHubTag(bytes32)\":[{\"notice\":\"Thrown when caller is missing a PWN Hub tag.\"}],\"InvalidLoanContractCaller()\":[{\"notice\":\"Thrown when `PWNLOAN.burn` caller is not a loan contract that minted the LOAN token.\"}]},\"events\":{\"LOANBurned(uint256)\":{\"notice\":\"Emitted when a LOAN token is burned.\"},\"LOANMinted(uint256,address,address)\":{\"notice\":\"Emitted when a new LOAN token is minted.\"}},\"kind\":\"user\",\"methods\":{\"burn(uint256)\":{\"notice\":\"Burn a LOAN token.\"},\"mint(address)\":{\"notice\":\"Mint a new LOAN token.\"},\"tokenURI(uint256)\":{\"notice\":\"Return a LOAN token metadata uri base on a loan contract that minted the token.\"}},\"notice\":\"A LOAN token representing a loan in PWN protocol.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/loan/token/PWNLOAN.sol\":\"PWNLOAN\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":MultiToken/=lib/MultiToken/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pwn/=src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\",\"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\"]},\"lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xde231558366826d7cb61725af8147965a61c53b77a352cc8c9af38fc5a92ac3c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd55624076bf61d44af5ff351919e32dda748567acfbdd6ba3d6c7be61c758e\",\"dweb:/ipfs/QmSki4dTrf4GPm7MTpG3fk8mC7rnjwd2zMomLp6jLuF63Q\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x2c309e7df9e05e6ce15bedfe74f3c61b467fc37e0fae9eab496acf5ea0bbd7ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7063b5c98711a98018ba4635ac74cee1c1cfa2ea01099498e062699ed9530005\",\"dweb:/ipfs/QmeJ8rGXkcv7RrqLdAW8PCXPAykxVsddfYY6g5NaTwmRFE\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e66dfde185df46104c11bc89d08fa0760737aa59a2b8546a656473d810a8ea4\",\"dweb:/ipfs/QmXvyqtXPaPss2PD7eqPoSao5Szm2n6UMoiG8TZZDjmChR\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708\",\"dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c\",\"dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b81d9ff6559ea5c47fc573e17ece6d9ba5d6839e213e6ebc3b4c5c8fe4199d7f\",\"dweb:/ipfs/QmPCW1bFisUzJkyjroY3yipwfism9RRCigCcK1hbXtVM8n\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c\",\"dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7\",\"dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6\"]},\"src/PWNErrors.sol\":{\"keccak256\":\"0x8a0e516fc8ddf54aecb82d5cbd19b6f263950a91d4411d1d4c54b90fae010692\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://b9cd08003376c48cdaf6279c4237a38efb1e26080bc29de3343bcfe397a4bb0f\",\"dweb:/ipfs/QmXtMtn71ZzRu1rGQLq8u5vnDy4k462d7mGtu1jFd7ZBJG\"]},\"src/hub/PWNHub.sol\":{\"keccak256\":\"0x92ad9edafc151bc7efc1b132c1be55966bb692860a94803a74ce5a948985126c\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://a04dbfe0ea39f7cd04b7947cac66ce77745ecc20a24aad3f8d35a6d319eec202\",\"dweb:/ipfs/QmbxoqEtL4YwMQDfCydurWLHeVjL1Yjc4Ty4vsRoCqXabv\"]},\"src/hub/PWNHubAccessControl.sol\":{\"keccak256\":\"0x310e0389c98971c4d6c25d8756c1e8a962c8b22c54e3ce6d80a383fb5b755448\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://63748084b8c8a9e2cce98a87d27a8baf353fae903641d6fdfc2cdc4ed229243f\",\"dweb:/ipfs/QmVywLNCBeWkNdWjpdumnAam1Shwj8k3DxxpRcWAK997Nw\"]},\"src/hub/PWNHubTags.sol\":{\"keccak256\":\"0xd1e685e8075f1f16835d38cfe39b1eee9edbf75089a0109002f7b2bfe14c177a\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://4a01df6b1c2cf493017b7abb4b9ec6ac16c9b1c3498b16ccbdc4f2045909dde8\",\"dweb:/ipfs/QmcYEgSZrE33YKxDDBvhVgZTfT9Tj1RTEX3iA717zZyspJ\"]},\"src/interfaces/IERC5646.sol\":{\"keccak256\":\"0xff5ce494375d2cf5a67fe9460ea66aa3572b8a0434ae538cbac0a55f7aac5c5e\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://e8e2b472fa80a92ae12985da77056f68f0e0f36fca7ac37b6d30db82a2527180\",\"dweb:/ipfs/QmdFTGSCaPcVfthbGSUuiyhivqBx6xN9dCL14PCbR39Wki\"]},\"src/interfaces/IPWNLoanMetadataProvider.sol\":{\"keccak256\":\"0x6cc991fd9c8c88e0a69e835fcd514868836e2432b12454dfcb6a681a3a9d13b8\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://69fd07433fd7eb2f1474d778476240434fa79a31525341d88a588573562389c6\",\"dweb:/ipfs/Qmb6gWNQD96oSgwH5Yf6eMHxYWXZwCPrd7MvK86r7UKhZK\"]},\"src/loan/token/PWNLOAN.sol\":{\"keccak256\":\"0x92981fb0bd0abcadc45b0f88bfc5fcc960ce7a5b79494fc6c9fd5990b197c764\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://e10726f492991694d751b68bf87a352f1284710ba311614295381a58ebfd226e\",\"dweb:/ipfs/Qmct6PYHSqHo9K9rGAif9ohBpJuQnTBWdHJRdENpetGg7k\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.16+commit.07a7930e"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "hub",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ],
          "type": "error",
          "name": "CallerMissingHubTag"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "InvalidLoanContractCaller"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "approved",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "Approval",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "operator",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "bool",
              "name": "approved",
              "type": "bool",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "ApprovalForAll",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "loanId",
              "type": "uint256",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "LOANBurned",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "loanId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "loanContract",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "LOANMinted",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "Transfer",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "approve"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "balanceOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "loanId",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "burn"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getApproved",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getStateFingerprint",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "operator",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "isApprovedForAll",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "lastLoanId",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "loanContract",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "mint",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "loanId",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "name",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "ownerOf",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "safeTransferFrom"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "safeTransferFrom"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "operator",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "approved",
              "type": "bool"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setApprovalForAll"
        },
        {
          "inputs": [
            {
              "internalType": "bytes4",
              "name": "interfaceId",
              "type": "bytes4"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "supportsInterface",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "symbol",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "tokenURI",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferFrom"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "approve(address,uint256)": {
            "details": "See {IERC721-approve}."
          },
          "balanceOf(address)": {
            "details": "See {IERC721-balanceOf}."
          },
          "burn(uint256)": {
            "details": "Any address that is associated with given loan id can call this function.      It is enabled to let deprecated loan contracts repay and claim existing loans.",
            "params": {
              "loanId": "Id of a LOAN token to be burned."
            }
          },
          "getApproved(uint256)": {
            "details": "See {IERC721-getApproved}."
          },
          "getStateFingerprint(uint256)": {
            "details": "See {IERC5646-getStateFingerprint}."
          },
          "isApprovedForAll(address,address)": {
            "details": "See {IERC721-isApprovedForAll}."
          },
          "mint(address)": {
            "details": "Only an address with associated `ACTIVE_LOAN` tag in PWN Hub can call this function.",
            "params": {
              "owner": "Address of a LOAN token receiver."
            },
            "returns": {
              "loanId": "Id of a newly minted LOAN token."
            }
          },
          "name()": {
            "details": "See {IERC721Metadata-name}."
          },
          "ownerOf(uint256)": {
            "details": "See {IERC721-ownerOf}."
          },
          "safeTransferFrom(address,address,uint256)": {
            "details": "See {IERC721-safeTransferFrom}."
          },
          "safeTransferFrom(address,address,uint256,bytes)": {
            "details": "See {IERC721-safeTransferFrom}."
          },
          "setApprovalForAll(address,bool)": {
            "details": "See {IERC721-setApprovalForAll}."
          },
          "supportsInterface(bytes4)": {
            "details": "See {IERC165-supportsInterface}."
          },
          "symbol()": {
            "details": "See {IERC721Metadata-symbol}."
          },
          "tokenURI(uint256)": {
            "params": {
              "tokenId": "Id of a LOAN token."
            },
            "returns": {
              "_0": "Metadata uri for given token id (loan id)."
            }
          },
          "transferFrom(address,address,uint256)": {
            "details": "See {IERC721-transferFrom}."
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {
          "burn(uint256)": {
            "notice": "Burn a LOAN token."
          },
          "mint(address)": {
            "notice": "Mint a new LOAN token."
          },
          "tokenURI(uint256)": {
            "notice": "Return a LOAN token metadata uri base on a loan contract that minted the token."
          }
        },
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        "MultiToken/=lib/MultiToken/src/",
        "ds-test/=lib/forge-std/lib/ds-test/src/",
        "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
        "forge-std/=lib/forge-std/src/",
        "openzeppelin-contracts/=lib/openzeppelin-contracts/",
        "openzeppelin/=lib/openzeppelin-contracts/contracts/",
        "pwn/=src/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/loan/token/PWNLOAN.sol": "PWNLOAN"
      },
      "libraries": {}
    },
    "sources": {
      "lib/openzeppelin-contracts/contracts/access/Ownable.sol": {
        "keccak256": "0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218",
        "urls": [
          "bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32",
          "dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": {
        "keccak256": "0xde231558366826d7cb61725af8147965a61c53b77a352cc8c9af38fc5a92ac3c",
        "urls": [
          "bzz-raw://1fd55624076bf61d44af5ff351919e32dda748567acfbdd6ba3d6c7be61c758e",
          "dweb:/ipfs/QmSki4dTrf4GPm7MTpG3fk8mC7rnjwd2zMomLp6jLuF63Q"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol": {
        "keccak256": "0x2c309e7df9e05e6ce15bedfe74f3c61b467fc37e0fae9eab496acf5ea0bbd7ff",
        "urls": [
          "bzz-raw://7063b5c98711a98018ba4635ac74cee1c1cfa2ea01099498e062699ed9530005",
          "dweb:/ipfs/QmeJ8rGXkcv7RrqLdAW8PCXPAykxVsddfYY6g5NaTwmRFE"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol": {
        "keccak256": "0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266",
        "urls": [
          "bzz-raw://7e66dfde185df46104c11bc89d08fa0760737aa59a2b8546a656473d810a8ea4",
          "dweb:/ipfs/QmXvyqtXPaPss2PD7eqPoSao5Szm2n6UMoiG8TZZDjmChR"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol": {
        "keccak256": "0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da",
        "urls": [
          "bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708",
          "dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol": {
        "keccak256": "0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9",
        "urls": [
          "bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146",
          "dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Address.sol": {
        "keccak256": "0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa",
        "urls": [
          "bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931",
          "dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Context.sol": {
        "keccak256": "0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439",
        "urls": [
          "bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c",
          "dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Strings.sol": {
        "keccak256": "0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0",
        "urls": [
          "bzz-raw://b81d9ff6559ea5c47fc573e17ece6d9ba5d6839e213e6ebc3b4c5c8fe4199d7f",
          "dweb:/ipfs/QmPCW1bFisUzJkyjroY3yipwfism9RRCigCcK1hbXtVM8n"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol": {
        "keccak256": "0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b",
        "urls": [
          "bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d",
          "dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": {
        "keccak256": "0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1",
        "urls": [
          "bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f",
          "dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": {
        "keccak256": "0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3",
        "urls": [
          "bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c",
          "dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol": {
        "keccak256": "0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc",
        "urls": [
          "bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7",
          "dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6"
        ],
        "license": "MIT"
      },
      "src/PWNErrors.sol": {
        "keccak256": "0x8a0e516fc8ddf54aecb82d5cbd19b6f263950a91d4411d1d4c54b90fae010692",
        "urls": [
          "bzz-raw://b9cd08003376c48cdaf6279c4237a38efb1e26080bc29de3343bcfe397a4bb0f",
          "dweb:/ipfs/QmXtMtn71ZzRu1rGQLq8u5vnDy4k462d7mGtu1jFd7ZBJG"
        ],
        "license": "GPL-3.0-only"
      },
      "src/hub/PWNHub.sol": {
        "keccak256": "0x92ad9edafc151bc7efc1b132c1be55966bb692860a94803a74ce5a948985126c",
        "urls": [
          "bzz-raw://a04dbfe0ea39f7cd04b7947cac66ce77745ecc20a24aad3f8d35a6d319eec202",
          "dweb:/ipfs/QmbxoqEtL4YwMQDfCydurWLHeVjL1Yjc4Ty4vsRoCqXabv"
        ],
        "license": "GPL-3.0-only"
      },
      "src/hub/PWNHubAccessControl.sol": {
        "keccak256": "0x310e0389c98971c4d6c25d8756c1e8a962c8b22c54e3ce6d80a383fb5b755448",
        "urls": [
          "bzz-raw://63748084b8c8a9e2cce98a87d27a8baf353fae903641d6fdfc2cdc4ed229243f",
          "dweb:/ipfs/QmVywLNCBeWkNdWjpdumnAam1Shwj8k3DxxpRcWAK997Nw"
        ],
        "license": "GPL-3.0-only"
      },
      "src/hub/PWNHubTags.sol": {
        "keccak256": "0xd1e685e8075f1f16835d38cfe39b1eee9edbf75089a0109002f7b2bfe14c177a",
        "urls": [
          "bzz-raw://4a01df6b1c2cf493017b7abb4b9ec6ac16c9b1c3498b16ccbdc4f2045909dde8",
          "dweb:/ipfs/QmcYEgSZrE33YKxDDBvhVgZTfT9Tj1RTEX3iA717zZyspJ"
        ],
        "license": "GPL-3.0-only"
      },
      "src/interfaces/IERC5646.sol": {
        "keccak256": "0xff5ce494375d2cf5a67fe9460ea66aa3572b8a0434ae538cbac0a55f7aac5c5e",
        "urls": [
          "bzz-raw://e8e2b472fa80a92ae12985da77056f68f0e0f36fca7ac37b6d30db82a2527180",
          "dweb:/ipfs/QmdFTGSCaPcVfthbGSUuiyhivqBx6xN9dCL14PCbR39Wki"
        ],
        "license": "GPL-3.0-only"
      },
      "src/interfaces/IPWNLoanMetadataProvider.sol": {
        "keccak256": "0x6cc991fd9c8c88e0a69e835fcd514868836e2432b12454dfcb6a681a3a9d13b8",
        "urls": [
          "bzz-raw://69fd07433fd7eb2f1474d778476240434fa79a31525341d88a588573562389c6",
          "dweb:/ipfs/Qmb6gWNQD96oSgwH5Yf6eMHxYWXZwCPrd7MvK86r7UKhZK"
        ],
        "license": "GPL-3.0-only"
      },
      "src/loan/token/PWNLOAN.sol": {
        "keccak256": "0x92981fb0bd0abcadc45b0f88bfc5fcc960ce7a5b79494fc6c9fd5990b197c764",
        "urls": [
          "bzz-raw://e10726f492991694d751b68bf87a352f1284710ba311614295381a58ebfd226e",
          "dweb:/ipfs/Qmct6PYHSqHo9K9rGAif9ohBpJuQnTBWdHJRdENpetGg7k"
        ],
        "license": "GPL-3.0-only"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/loan/token/PWNLOAN.sol",
    "id": 65744,
    "exportedSymbols": {
      "ERC721": [
        52230
      ],
      "IERC5646": [
        60616
      ],
      "IPWNLoanMetadataProvider": [
        60668
      ],
      "InvalidLoanContractCaller": [
        59974
      ],
      "PWNHubAccessControl": [
        60580
      ],
      "PWNLOAN": [
        65743
      ]
    },
    "nodeType": "SourceUnit",
    "src": "41:4871:92",
    "nodes": [
      {
        "id": 65546,
        "nodeType": "PragmaDirective",
        "src": "41:23:92",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".16"
        ]
      },
      {
        "id": 65548,
        "nodeType": "ImportDirective",
        "src": "66:62:92",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol",
        "file": "openzeppelin/token/ERC721/ERC721.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 65744,
        "sourceUnit": 52231,
        "symbolAliases": [
          {
            "foreign": {
              "id": 65547,
              "name": "ERC721",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 52230,
              "src": "75:6:92",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 65550,
        "nodeType": "ImportDirective",
        "src": "130:70:92",
        "nodes": [],
        "absolutePath": "src/hub/PWNHubAccessControl.sol",
        "file": "pwn/hub/PWNHubAccessControl.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 65744,
        "sourceUnit": 60581,
        "symbolAliases": [
          {
            "foreign": {
              "id": 65549,
              "name": "PWNHubAccessControl",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 60580,
              "src": "139:19:92",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 65552,
        "nodeType": "ImportDirective",
        "src": "201:55:92",
        "nodes": [],
        "absolutePath": "src/interfaces/IERC5646.sol",
        "file": "pwn/interfaces/IERC5646.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 65744,
        "sourceUnit": 60617,
        "symbolAliases": [
          {
            "foreign": {
              "id": 65551,
              "name": "IERC5646",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 60616,
              "src": "210:8:92",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 65554,
        "nodeType": "ImportDirective",
        "src": "257:87:92",
        "nodes": [],
        "absolutePath": "src/interfaces/IPWNLoanMetadataProvider.sol",
        "file": "pwn/interfaces/IPWNLoanMetadataProvider.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 65744,
        "sourceUnit": 60669,
        "symbolAliases": [
          {
            "foreign": {
              "id": 65553,
              "name": "IPWNLoanMetadataProvider",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 60668,
              "src": "266:24:92",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 65556,
        "nodeType": "ImportDirective",
        "src": "345:62:92",
        "nodes": [],
        "absolutePath": "src/PWNErrors.sol",
        "file": "pwn/PWNErrors.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 65744,
        "sourceUnit": 59985,
        "symbolAliases": [
          {
            "foreign": {
              "id": 65555,
              "name": "InvalidLoanContractCaller",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 59974,
              "src": "354:25:92",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 65743,
        "nodeType": "ContractDefinition",
        "src": "671:4240:92",
        "nodes": [
          {
            "id": 65566,
            "nodeType": "VariableDeclaration",
            "src": "1032:25:92",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 65564,
              "nodeType": "StructuredDocumentation",
              "src": "938:89:92",
              "text": " @dev Last used LOAN id. First LOAN id is 1. This value is incremental."
            },
            "functionSelector": "68be92b4",
            "mutability": "mutable",
            "name": "lastLoanId",
            "nameLocation": "1047:10:92",
            "scope": 65743,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 65565,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1032:7:92",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "id": 65571,
            "nodeType": "VariableDeclaration",
            "src": "1160:48:92",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 65567,
              "nodeType": "StructuredDocumentation",
              "src": "1064:91:92",
              "text": " @dev Mapping of a LOAN id to a loan contract that minted the LOAN token."
            },
            "functionSelector": "a00d21fc",
            "mutability": "mutable",
            "name": "loanContract",
            "nameLocation": "1196:12:92",
            "scope": 65743,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
              "typeString": "mapping(uint256 => address)"
            },
            "typeName": {
              "id": 65570,
              "keyType": {
                "id": 65568,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1169:7:92",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1160:28:92",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                "typeString": "mapping(uint256 => address)"
              },
              "valueType": {
                "id": 65569,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1180:7:92",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 65580,
            "nodeType": "EventDefinition",
            "src": "1490:94:92",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 65572,
              "nodeType": "StructuredDocumentation",
              "src": "1418:67:92",
              "text": " @notice Emitted when a new LOAN token is minted."
            },
            "eventSelector": "2ca529bede83c064afd9331357a1ce320271c9c7ceda28ac31472d76f7aff530",
            "name": "LOANMinted",
            "nameLocation": "1496:10:92",
            "parameters": {
              "id": 65579,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 65574,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "1523:6:92",
                  "nodeType": "VariableDeclaration",
                  "scope": 65580,
                  "src": "1507:22:92",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 65573,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1507:7:92",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 65576,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "loanContract",
                  "nameLocation": "1547:12:92",
                  "nodeType": "VariableDeclaration",
                  "scope": 65580,
                  "src": "1531:28:92",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 65575,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1531:7:92",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 65578,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "1577:5:92",
                  "nodeType": "VariableDeclaration",
                  "scope": 65580,
                  "src": "1561:21:92",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 65577,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1561:7:92",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1506:77:92"
            }
          },
          {
            "id": 65585,
            "nodeType": "EventDefinition",
            "src": "1658:41:92",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 65581,
              "nodeType": "StructuredDocumentation",
              "src": "1590:63:92",
              "text": " @notice Emitted when a LOAN token is burned."
            },
            "eventSelector": "56f7da88d3aa2a8ad74b71a5b449a66a643193815eace8bbd6b089d4bc18294b",
            "name": "LOANBurned",
            "nameLocation": "1664:10:92",
            "parameters": {
              "id": 65584,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 65583,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "1691:6:92",
                  "nodeType": "VariableDeclaration",
                  "scope": 65585,
                  "src": "1675:22:92",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 65582,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1675:7:92",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1674:24:92"
            }
          },
          {
            "id": 65598,
            "nodeType": "FunctionDefinition",
            "src": "1908:85:92",
            "nodes": [],
            "body": {
              "id": 65597,
              "nodeType": "Block",
              "src": "1985:8:92",
              "nodes": [],
              "statements": []
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 65590,
                    "name": "hub",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 65587,
                    "src": "1953:3:92",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 65591,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 65589,
                  "name": "PWNHubAccessControl",
                  "nameLocations": [
                    "1933:19:92"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 60580,
                  "src": "1933:19:92"
                },
                "nodeType": "ModifierInvocation",
                "src": "1933:24:92"
              },
              {
                "arguments": [
                  {
                    "hexValue": "50574e204c4f414e",
                    "id": 65593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1965:10:92",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_417d70dafabe52c6122db3346ddf07441bff695b97bfaa9d77fc88a33f5670f7",
                      "typeString": "literal_string \"PWN LOAN\""
                    },
                    "value": "PWN LOAN"
                  },
                  {
                    "hexValue": "4c4f414e",
                    "id": 65594,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1977:6:92",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_2a41f9b3a505d8edc1a93ce275b35e4c13d04d50588552682701d120e7a17a06",
                      "typeString": "literal_string \"LOAN\""
                    },
                    "value": "LOAN"
                  }
                ],
                "id": 65595,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 65592,
                  "name": "ERC721",
                  "nameLocations": [
                    "1958:6:92"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 52230,
                  "src": "1958:6:92"
                },
                "nodeType": "ModifierInvocation",
                "src": "1958:26:92"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 65588,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 65587,
                  "mutability": "mutable",
                  "name": "hub",
                  "nameLocation": "1928:3:92",
                  "nodeType": "VariableDeclaration",
                  "scope": 65598,
                  "src": "1920:11:92",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 65586,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1920:7:92",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1919:13:92"
            },
            "returnParameters": {
              "id": 65596,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1985:0:92"
            },
            "scope": 65743,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 65633,
            "nodeType": "FunctionDefinition",
            "src": "2462:241:92",
            "nodes": [],
            "body": {
              "id": 65632,
              "nodeType": "Block",
              "src": "2540:163:92",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 65611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 65608,
                      "name": "loanId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 65606,
                      "src": "2550:6:92",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 65610,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "2559:12:92",
                      "subExpression": {
                        "id": 65609,
                        "name": "lastLoanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65566,
                        "src": "2561:10:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2550:21:92",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 65612,
                  "nodeType": "ExpressionStatement",
                  "src": "2550:21:92"
                },
                {
                  "expression": {
                    "id": 65618,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 65613,
                        "name": "loanContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65571,
                        "src": "2581:12:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                          "typeString": "mapping(uint256 => address)"
                        }
                      },
                      "id": 65615,
                      "indexExpression": {
                        "id": 65614,
                        "name": "loanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65606,
                        "src": "2594:6:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2581:20:92",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 65616,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "2604:3:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 65617,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2608:6:92",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "2604:10:92",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2581:33:92",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 65619,
                  "nodeType": "ExpressionStatement",
                  "src": "2581:33:92"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 65621,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65601,
                        "src": "2630:5:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 65622,
                        "name": "loanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65606,
                        "src": "2637:6:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 65620,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51904,
                      "src": "2624:5:92",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 65623,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2624:20:92",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 65624,
                  "nodeType": "ExpressionStatement",
                  "src": "2624:20:92"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 65626,
                        "name": "loanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65606,
                        "src": "2670:6:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 65627,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "2678:3:92",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 65628,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2682:6:92",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "2678:10:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 65629,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65601,
                        "src": "2690:5:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 65625,
                      "name": "LOANMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 65580,
                      "src": "2659:10:92",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address,address)"
                      }
                    },
                    "id": 65630,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2659:37:92",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 65631,
                  "nodeType": "EmitStatement",
                  "src": "2654:42:92"
                }
              ]
            },
            "documentation": {
              "id": 65599,
              "nodeType": "StructuredDocumentation",
              "src": "2202:255:92",
              "text": " @notice Mint a new LOAN token.\n @dev Only an address with associated `ACTIVE_LOAN` tag in PWN Hub can call this function.\n @param owner Address of a LOAN token receiver.\n @return loanId Id of a newly minted LOAN token."
            },
            "functionSelector": "6a627842",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 65604,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 65603,
                  "name": "onlyActiveLoan",
                  "nameLocations": [
                    "2500:14:92"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 60548,
                  "src": "2500:14:92"
                },
                "nodeType": "ModifierInvocation",
                "src": "2500:14:92"
              }
            ],
            "name": "mint",
            "nameLocation": "2471:4:92",
            "parameters": {
              "id": 65602,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 65601,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "2484:5:92",
                  "nodeType": "VariableDeclaration",
                  "scope": 65633,
                  "src": "2476:13:92",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 65600,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2476:7:92",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2475:15:92"
            },
            "returnParameters": {
              "id": 65607,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 65606,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "2532:6:92",
                  "nodeType": "VariableDeclaration",
                  "scope": 65633,
                  "src": "2524:14:92",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 65605,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2524:7:92",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2523:16:92"
            },
            "scope": 65743,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 65663,
            "nodeType": "FunctionDefinition",
            "src": "2990:236:92",
            "nodes": [],
            "body": {
              "id": 65662,
              "nodeType": "Block",
              "src": "3029:197:92",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 65644,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "id": 65639,
                        "name": "loanContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65571,
                        "src": "3043:12:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                          "typeString": "mapping(uint256 => address)"
                        }
                      },
                      "id": 65641,
                      "indexExpression": {
                        "id": 65640,
                        "name": "loanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65636,
                        "src": "3056:6:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3043:20:92",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 65642,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "3067:3:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 65643,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3071:6:92",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "3067:10:92",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3043:34:92",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 65648,
                  "nodeType": "IfStatement",
                  "src": "3039:86:92",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 65645,
                        "name": "InvalidLoanContractCaller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59974,
                        "src": "3098:25:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 65646,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3098:27:92",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 65647,
                    "nodeType": "RevertStatement",
                    "src": "3091:34:92"
                  }
                },
                {
                  "expression": {
                    "id": 65652,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "3136:27:92",
                    "subExpression": {
                      "baseExpression": {
                        "id": 65649,
                        "name": "loanContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65571,
                        "src": "3143:12:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                          "typeString": "mapping(uint256 => address)"
                        }
                      },
                      "id": 65651,
                      "indexExpression": {
                        "id": 65650,
                        "name": "loanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65636,
                        "src": "3156:6:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3143:20:92",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 65653,
                  "nodeType": "ExpressionStatement",
                  "src": "3136:27:92"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 65655,
                        "name": "loanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65636,
                        "src": "3179:6:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 65654,
                      "name": "_burn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51971,
                      "src": "3173:5:92",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 65656,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3173:13:92",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 65657,
                  "nodeType": "ExpressionStatement",
                  "src": "3173:13:92"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 65659,
                        "name": "loanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65636,
                        "src": "3212:6:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 65658,
                      "name": "LOANBurned",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 65585,
                      "src": "3201:10:92",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 65660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3201:18:92",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 65661,
                  "nodeType": "EmitStatement",
                  "src": "3196:23:92"
                }
              ]
            },
            "documentation": {
              "id": 65634,
              "nodeType": "StructuredDocumentation",
              "src": "2709:276:92",
              "text": " @notice Burn a LOAN token.\n @dev Any address that is associated with given loan id can call this function.\n      It is enabled to let deprecated loan contracts repay and claim existing loans.\n @param loanId Id of a LOAN token to be burned."
            },
            "functionSelector": "42966c68",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "burn",
            "nameLocation": "2999:4:92",
            "parameters": {
              "id": 65637,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 65636,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "3012:6:92",
                  "nodeType": "VariableDeclaration",
                  "scope": 65663,
                  "src": "3004:14:92",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 65635,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3004:7:92",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3003:16:92"
            },
            "returnParameters": {
              "id": 65638,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3029:0:92"
            },
            "scope": 65743,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 65685,
            "nodeType": "FunctionDefinition",
            "src": "3646:211:92",
            "nodes": [],
            "body": {
              "id": 65684,
              "nodeType": "Block",
              "src": "3734:123:92",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 65673,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65666,
                        "src": "3759:7:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 65672,
                      "name": "_requireMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52126,
                      "src": "3744:14:92",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) view"
                      }
                    },
                    "id": 65674,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3744:23:92",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 65675,
                  "nodeType": "ExpressionStatement",
                  "src": "3744:23:92"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "arguments": [
                          {
                            "baseExpression": {
                              "id": 65677,
                              "name": "loanContract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 65571,
                              "src": "3810:12:92",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 65679,
                            "indexExpression": {
                              "id": 65678,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 65666,
                              "src": "3823:7:92",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3810:21:92",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 65676,
                          "name": "IPWNLoanMetadataProvider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 60668,
                          "src": "3785:24:92",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IPWNLoanMetadataProvider_$60668_$",
                            "typeString": "type(contract IPWNLoanMetadataProvider)"
                          }
                        },
                        "id": 65680,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3785:47:92",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPWNLoanMetadataProvider_$60668",
                          "typeString": "contract IPWNLoanMetadataProvider"
                        }
                      },
                      "id": 65681,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3833:15:92",
                      "memberName": "loanMetadataUri",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 60667,
                      "src": "3785:63:92",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_string_memory_ptr_$",
                        "typeString": "function () view external returns (string memory)"
                      }
                    },
                    "id": 65682,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3785:65:92",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 65671,
                  "id": 65683,
                  "nodeType": "Return",
                  "src": "3778:72:92"
                }
              ]
            },
            "baseFunctions": [
              51508
            ],
            "documentation": {
              "id": 65664,
              "nodeType": "StructuredDocumentation",
              "src": "3435:206:92",
              "text": " @notice Return a LOAN token metadata uri base on a loan contract that minted the token.\n @param tokenId Id of a LOAN token.\n @return Metadata uri for given token id (loan id)."
            },
            "functionSelector": "c87b56dd",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokenURI",
            "nameLocation": "3655:8:92",
            "overrides": {
              "id": 65668,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3701:8:92"
            },
            "parameters": {
              "id": 65667,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 65666,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "3672:7:92",
                  "nodeType": "VariableDeclaration",
                  "scope": 65685,
                  "src": "3664:15:92",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 65665,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3664:7:92",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3663:17:92"
            },
            "returnParameters": {
              "id": 65671,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 65670,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 65685,
                  "src": "3719:13:92",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 65669,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3719:6:92",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3718:15:92"
            },
            "scope": 65743,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 65720,
            "nodeType": "FunctionDefinition",
            "src": "4130:300:92",
            "nodes": [],
            "body": {
              "id": 65719,
              "nodeType": "Block",
              "src": "4225:205:92",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    65695
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 65695,
                      "mutability": "mutable",
                      "name": "_loanContract",
                      "nameLocation": "4243:13:92",
                      "nodeType": "VariableDeclaration",
                      "scope": 65719,
                      "src": "4235:21:92",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 65694,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4235:7:92",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 65699,
                  "initialValue": {
                    "baseExpression": {
                      "id": 65696,
                      "name": "loanContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 65571,
                      "src": "4259:12:92",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                        "typeString": "mapping(uint256 => address)"
                      }
                    },
                    "id": 65698,
                    "indexExpression": {
                      "id": 65697,
                      "name": "tokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 65688,
                      "src": "4272:7:92",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4259:21:92",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4235:45:92"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 65705,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 65700,
                      "name": "_loanContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 65695,
                      "src": "4295:13:92",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 65703,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4320:1:92",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 65702,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4312:7:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 65701,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4312:7:92",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 65704,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4312:10:92",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4295:27:92",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 65711,
                  "nodeType": "IfStatement",
                  "src": "4291:62:92",
                  "trueBody": {
                    "expression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 65708,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4351:1:92",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 65707,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4343:7:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        },
                        "typeName": {
                          "id": 65706,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4343:7:92",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 65709,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4343:10:92",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "functionReturnParameters": 65693,
                    "id": 65710,
                    "nodeType": "Return",
                    "src": "4336:17:92"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 65716,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65688,
                        "src": "4415:7:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 65713,
                            "name": "_loanContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 65695,
                            "src": "4380:13:92",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 65712,
                          "name": "IERC5646",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 60616,
                          "src": "4371:8:92",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC5646_$60616_$",
                            "typeString": "type(contract IERC5646)"
                          }
                        },
                        "id": 65714,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4371:23:92",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC5646_$60616",
                          "typeString": "contract IERC5646"
                        }
                      },
                      "id": 65715,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4395:19:92",
                      "memberName": "getStateFingerprint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 60615,
                      "src": "4371:43:92",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_bytes32_$",
                        "typeString": "function (uint256) view external returns (bytes32)"
                      }
                    },
                    "id": 65717,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4371:52:92",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 65693,
                  "id": 65718,
                  "nodeType": "Return",
                  "src": "4364:59:92"
                }
              ]
            },
            "baseFunctions": [
              60615
            ],
            "documentation": {
              "id": 65686,
              "nodeType": "StructuredDocumentation",
              "src": "4066:59:92",
              "text": " @dev See {IERC5646-getStateFingerprint}."
            },
            "functionSelector": "f5112315",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getStateFingerprint",
            "nameLocation": "4139:19:92",
            "overrides": {
              "id": 65690,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4198:8:92"
            },
            "parameters": {
              "id": 65689,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 65688,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "4167:7:92",
                  "nodeType": "VariableDeclaration",
                  "scope": 65720,
                  "src": "4159:15:92",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 65687,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4159:7:92",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4158:17:92"
            },
            "returnParameters": {
              "id": 65693,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 65692,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 65720,
                  "src": "4216:7:92",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 65691,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4216:7:92",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4215:9:92"
            },
            "scope": 65743,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "external"
          },
          {
            "id": 65742,
            "nodeType": "FunctionDefinition",
            "src": "4700:208:92",
            "nodes": [],
            "body": {
              "id": 65741,
              "nodeType": "Block",
              "src": "4791:117:92",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 65739,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 65731,
                          "name": "interfaceId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 65723,
                          "src": "4832:11:92",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        ],
                        "expression": {
                          "id": 65729,
                          "name": "super",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -25,
                          "src": "4808:5:92",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_super$_PWNLOAN_$65743_$",
                            "typeString": "type(contract super PWNLOAN)"
                          }
                        },
                        "id": 65730,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4814:17:92",
                        "memberName": "supportsInterface",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 51397,
                        "src": "4808:23:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
                          "typeString": "function (bytes4) view returns (bool)"
                        }
                      },
                      "id": 65732,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4808:36:92",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 65738,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 65733,
                        "name": "interfaceId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65723,
                        "src": "4860:11:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "expression": {
                          "arguments": [
                            {
                              "id": 65735,
                              "name": "IERC5646",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 60616,
                              "src": "4880:8:92",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC5646_$60616_$",
                                "typeString": "type(contract IERC5646)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_type$_t_contract$_IERC5646_$60616_$",
                                "typeString": "type(contract IERC5646)"
                              }
                            ],
                            "id": 65734,
                            "name": "type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -27,
                            "src": "4875:4:92",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 65736,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4875:14:92",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_meta_type_t_contract$_IERC5646_$60616",
                            "typeString": "type(contract IERC5646)"
                          }
                        },
                        "id": 65737,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "4890:11:92",
                        "memberName": "interfaceId",
                        "nodeType": "MemberAccess",
                        "src": "4875:26:92",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "src": "4860:41:92",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4808:93:92",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 65728,
                  "id": 65740,
                  "nodeType": "Return",
                  "src": "4801:100:92"
                }
              ]
            },
            "baseFunctions": [
              51397
            ],
            "documentation": {
              "id": 65721,
              "nodeType": "StructuredDocumentation",
              "src": "4639:56:92",
              "text": " @dev See {IERC165-supportsInterface}."
            },
            "functionSelector": "01ffc9a7",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "supportsInterface",
            "nameLocation": "4709:17:92",
            "overrides": {
              "id": 65725,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4767:8:92"
            },
            "parameters": {
              "id": 65724,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 65723,
                  "mutability": "mutable",
                  "name": "interfaceId",
                  "nameLocation": "4734:11:92",
                  "nodeType": "VariableDeclaration",
                  "scope": 65742,
                  "src": "4727:18:92",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 65722,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "4727:6:92",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4726:20:92"
            },
            "returnParameters": {
              "id": 65728,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 65727,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 65742,
                  "src": "4785:4:92",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 65726,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4785:4:92",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4784:6:92"
            },
            "scope": 65743,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 65558,
              "name": "PWNHubAccessControl",
              "nameLocations": [
                "691:19:92"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 60580,
              "src": "691:19:92"
            },
            "id": 65559,
            "nodeType": "InheritanceSpecifier",
            "src": "691:19:92"
          },
          {
            "baseName": {
              "id": 65560,
              "name": "IERC5646",
              "nameLocations": [
                "712:8:92"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 60616,
              "src": "712:8:92"
            },
            "id": 65561,
            "nodeType": "InheritanceSpecifier",
            "src": "712:8:92"
          },
          {
            "baseName": {
              "id": 65562,
              "name": "ERC721",
              "nameLocations": [
                "722:6:92"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 52230,
              "src": "722:6:92"
            },
            "id": 65563,
            "nodeType": "InheritanceSpecifier",
            "src": "722:6:92"
          }
        ],
        "canonicalName": "PWNLOAN",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 65557,
          "nodeType": "StructuredDocumentation",
          "src": "410:260:92",
          "text": " @title PWN LOAN token\n @notice A LOAN token representing a loan in PWN protocol.\n @dev Token doesn't hold any loan logic, just an address of a loan contract that minted the LOAN token.\n      PWN LOAN token is shared between all loan contracts."
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          65743,
          52230,
          52391,
          52346,
          54008,
          54214,
          52751,
          60616,
          60580
        ],
        "name": "PWNLOAN",
        "nameLocation": "680:7:92",
        "scope": 65744,
        "usedErrors": [
          59964,
          59974
        ]
      }
    ],
    "license": "GPL-3.0-only"
  },
  "id": 92
}